Method and apparatus for printhead control

ABSTRACT

A method, apparatus, and computer program product are described herein for controlling a printing device. In an example embodiment, a print line is divided into frames and frame dot states are determined based on neighboring frame dot states. Maximum motor speeds of the printing device may be adjusted so that actual motor speeds change gradually during printing. The print engine may detect a printhead type by sending a signal to the printhead and receiving a response.

CROSS REFERENCE TO RELATED APPLICATIONS

This application claims the benefit of priority to U.S. ProvisionalApplication No. 61/583,428, which was filed Jan. 5, 2012 and is herebyincorporated by reference in its entirety.

TECHNICAL FIELD

The present invention relates generally to printing devices. Someaspects of the invention relate specifically to thermal printing deviceswhile other aspects may be implemented in various other types ofprinting devices.

BACKGROUND

Thermal printers are used in a variety of different applications, suchas, for example, receipt dispensing systems for ATMs and point-of-saledevices. Various types of thermal printers have been developed includingdirect thermal printers, thermal transfer printers, dye-sublimationthermal printers, or the like. To generate a printed media, such as areceipt, a printer may include a thermal printhead that applies energyto series of printhead dots (e.g., heating elements) to print respectivedot images on the media. Printheads may have varying sizes, shapes, andmay have varying numbers of printhead dots depending on the printerapplication. For example, a printer application that requires two-inchwide media may require a printhead having 384 dots that are capable ofprinting a 2-inch wide print line (i.e., a line of print that spansacross the media, often perpendicular to the direction in which themedia feeds). Applying energy to the dots of the thermal printhead heatsthe dots and permits the heat energy generated by the dots to betransferred to the media to image (i.e., print) the media. Thermal printmedia (e.g., thermochromic paper) can be designed and manufactured suchthat when the media receives a threshold amount of energy, the media maychange color, for example, from white to black. Other types of printmedia may alternatively be used that are designed and optimized forgrayscale printing. In some instances, the media may be synthetic,rather than being paper-based. A synthetic media may be configured tochange from clear to black in response to absorbing a threshold amountof heat energy.

Because printheads can have a linear series of printhead dots that spanthe width of the media, thermal printers often print one line of a printjob at a time. Based on the content to be printed, different printheaddots for a given line may be turned on or off. For example, if a solidline is to be printed across the media, then all of the printhead dotsmay be turned on to print that line as a solid line of dot images.Energizing the printhead dots can be referred to as strobing the dots,and the time needed to strobe the dots for a particular print event isreferred to as the strobe time. Each line of a given print job may beprinted by moving the media, via a motor, relative to the printhead andchanging which printhead dots are turned on and which printhead dots areturned off. The speed at which the media is printed is often measured ininches per second, or ips, which can be related to the line strobe timerequired for printing individual lines in a given print job.

Applicant has identified a number of deficiencies and problemsassociated with the printing of labels or other media. Through appliedeffort, ingenuity, and innovation, Applicant has solved many of theseidentified problems by developing a solution that is embodied by thepresent invention, which is described in detail below.

BRIEF SUMMARY

A method, apparatus, and computer program product are provided forcontrolling a printing device. In some embodiments, a method is providedfor analyzing a neighbor memory layout for a selected line dot state,wherein the neighbor memory layout comprises the selected line dot stateand a plurality of neighboring line dot states, and based on theanalysis, determining a frame dot state sequence for the selected linedot state, wherein the frame dot state sequence comprises a plurality offrame dot states indicating a state of a printhead dot during printing.

The neighboring line dot states may be identified based on spatialproximity to the selected line dot state and/or temporal proximity tothe selected line dot state. In some embodiments the method may furtherinclude determining a layout signature by generating a binary numberrepresentative of the selected line dot state and the neighboring linedot states, and determining the frame dot state sequence based on thelayout signature. In some embodiments, the method may further includeconverting the binary number to a hexadecimal number, identifying anaddress of a frame dot state sequence associated with the hexadecimalnumber, and determining the frame dot sequence based on the address.

In some embodiments, the method may further include retrieving a printdata line, generating at least two frames representative of the printdata line, transmitting the at least two frames to a printhead forprinting to a media, and signaling to a motor to move the media. Theprint data lines may be retrieved from a first-in first-out memorybuffer, and/or the at least two frames may be stored in a first-infirst-out memory buffer.

In some embodiments, a computer program product is provided, includingat least one non-transitory computer-readable storage medium havingcomputer-executable program code instructions stored therein, thecomputer-executable program code instructions comprising program codeinstructions to analyze a neighbor memory layout for a selected line dotstate, wherein the neighbor memory layout comprises the selected linedot state and a plurality of neighboring line dot states, and based onthe analysis, determine a frame dot state sequence for the selected linedot state, wherein the frame dot state sequence comprises a plurality offrame dot states indicating a state of a printhead dot during printing.

In some embodiments, a printing device is provided, comprisingprocessing circuitry configured to analyze a neighbor memory layout fora selected line dot state, wherein the neighbor memory layout comprisesthe selected line dot state and a plurality of neighboring line dotstates, and based on the analysis, determine a frame dot state sequencefor the selected line dot state, wherein the frame dot state sequencecomprises a plurality of frame dot states indicating a state of aprinthead dot during printing.

In some embodiments, a method is provided for accessing a plurality ofprint data lines in a memory device, wherein a print data line indicateswhere dot images will be printed across a line of a media, determiningrespective line strobe times and maximum motor speeds for the print datalines, determining a maximum step in motor speed from a printing of oneline to a printing of an adjacent line, and determining an actual motorspeed for a selected print data line based on the maximum motor speedfor the selected print data line, the maximum step in motor speed, andthe respective line strobe times.

In some embodiments, the method may further include identifying alongest strobe time from the respective strobe times, wherein thedetermining an actual motor speed for a selected print data line isfurther based on the longest strobe time. The method may includeretrieving the selected print data line from a first-in first-out memorybuffer. In some embodiments, determining the maximum step in motor speedis based on at least on a number of print data lines in the first-infirst-out memory buffer.

A computer program product is also provided, comprising at least onenon-transitory computer-readable storage medium havingcomputer-executable program code instructions stored therein, thecomputer-executable program code instructions comprising program codeinstructions to access a plurality of print data lines in a memorydevice, wherein a print data line indicates where dot images will beprinted across a line of a media, determine respective line strobe timesand maximum motor speeds for the print data lines, determine a maximumstep in motor speed from a printing of one line to a printing of anadjacent line, determine an actual motor speed for a selected print dataline based on the maximum motor speed for the selected print data line,the maximum step in motor speed, and the respective line strobe times.

In some embodiments, a printing device is provided, comprisingprocessing circuitry configured to access a plurality of print datalines in a memory device, wherein a print data line indicates where dotimages will be printed across a line of a media, determine respectiveline strobe times and maximum motor speeds for the print data lines,determine a maximum step in motor speed from a printing of one line to aprinting of an adjacent line, determine an actual motor speed for aselected print data line based on the maximum motor speed for theselected print data line, the maximum step in motor speed, and therespective line strobe times.

In some embodiments, a method is provided for transmitting a signal to aprinthead on a print engine output pin, monitoring a print engine inputpin for a response, and in an instance a response is received,determining a printhead type based on the output pin. In an instance aresponse is not received, the method includes transmitting a signal tothe printhead on a different print engine output pin.

In some embodiments, a computer program product is provided, comprisingat least one non-transitory computer-readable storage medium havingcomputer-executable program code instructions stored therein, thecomputer-executable program code instructions comprising program codeinstructions to transmit a signal to a printhead on a print engineoutput pin, monitor a print engine input pin for a response, and in aninstance a response is received, determine a printhead type based on theoutput pin.

In some embodiments, a printing device is provided, with processingcircuitry configured to transmit a signal to a printhead on a printengine output pin, monitor a print engine input pin for a response, andin an instance a response is received, determine a printhead type basedon the output pin.

BRIEF DESCRIPTON OF THE DRAWINGS

Reference will hereinafter be made to the accompanying drawings whichare not necessarily drawn to scale, and wherein:

FIG. 1A is a schematic block diagram of an example printing device inaccordance with some example embodiments;

FIG. 1B is a schematic representation of an example printhead inaccordance with some example embodiments;

FIG. 1C illustrates example print job information in accordance withsome example embodiments;

FIG. 1D illustrates an example media printed to using the print jobinformation of FIG. 1C in accordance with some example embodiments;

FIG. 2A illustrates example print data lines in accordance with someexample embodiments;

FIG. 2B is an example neighbor memory layout schematic in accordancewith some example embodiments;

FIG. 2C illustrates an example neighbor memory layout in accordance withsome example embodiments;

FIG. 2D illustrates a layout signature presented as a binary number inaccordance with some example embodiments;

FIG. 3A is a table of addresses of frame dot state sequences inaccordance with some example embodiments;

FIG. 3B is a table of frame dot state sequences in accordance with someexample embodiments;

FIG. 4 illustrates an example compilation of frame dot state sequences;

FIG. 5 is a flowchart of a process for producing a printed line usingsuccessive frames in accordance with some example embodiments;

FIG. 6 is a flowchart illustrating the processing of a print data lineinto frames using neighbor analysis in accordance with some exampleembodiments;

FIG. 7A illustrates example print data lines with respective strobetimes and motor speeds in accordance with some example embodiments;

FIG. 7B is a a graph of motor speeds in accordance with some exampleembodiments;

FIG. 7C is a flowchart illustrating operations that may be performed bya print engine 170 to implement motor control in accordance with someexample embodiments;

FIGS. 8A and 8B are example pin configurations for printheads inaccordance with some example embodiments;

FIG. 9 is an illustration of communications between a FPGA and printheadin accordance with some example embodiments; and

FIG. 10 is a flowchart illustrating operations for detecting a printheadin accordance with some example embodiments.

DETAILED DESCRIPTION

Some embodiments of the present invention will now be described morefully hereinafter with reference to the accompanying drawings, in whichsome, but not all embodiments of the invention are shown. Indeed,various embodiments of the invention may be embodied in many differentforms and should not be construed as limited to the embodiments setforth herein; rather, these embodiments are provided so that thisdisclosure will satisfy applicable legal requirements. Like referencenumerals refer to like elements throughout.

FIG. 1A is a schematic block diagram of an example printing device 100according to some example embodiments. The printing device 100 may be adirect thermal printer, a thermal transfer printer, or the like. Theprinting device 100 may be a stand-alone unit (e.g., a handheld printer)or may be integrated into a larger apparatus, such as an ATM, gas pump,point-of-sale device, or the like.

A printhead assembly 190 may include a printhead driver 150 and aprinthead 130. In embodiments in which print device 100 is embodied as athermal printer, the printhead driver 150 may be a hardware deviceconfigured to receive signals in the form of, for example, data to beprinted, and, based on the data, energize (e.g., heat) dots of theprinthead 130. According to various example embodiments, the printengine 170 may be configured to control the dots of the printhead toensure that a sufficient amount of energy is transferred to a media toproperly print a line. Depending on the type of media, a thresholdnumber of joules per square inch or Watt*seconds per square inch may beneeded to cause the media to have a chemical reaction that changes theappearance of the media (e.g., from white to black).

FIG. 1B is a schematic representation of an example printhead inaccordance with some example embodiments. The example printhead 130 hasfive printhead dots 131. As described above, a “printhead dot” may beconsidered an element of the printhead capable of applying energy so asto print to a media. As was noted above and will be apparent to one ofordinary skill in the art, the inventive concepts herein described maybe applied to printheads having all manner of sizes and dot structures(e.g., 384 dots, etc.). When positioned in the printing device 100, theprinthead dots 131 may interface with a printable media to heat themedia and thereby print respective dot images to the media. A “dotstate” may therefore be considered an indication of whether or not aparticular dot will be energized. A dot state of ‘on’ or ‘1’ maytherefore indicated the particular dot is to be energized, while a dotstate of ‘off’ or ‘0’ may indicate the particular dot should not beenergized. As described above, the energnizing of the dots may bereferred to as “strobing” the dots, and the length of time taken tostrobe the dots during the printing of any one line may be consideredthe “line strobe time.”

FIG. 1C illustrates example print job information 181, including printdata lines such as print data line 182. “Print job information” may beconsidered any information indicating where on the media dot imagesshould be printed. In this example, the print job information 181 isprovided as print data lines. A “print data line,” such as print dataline 182 may be considered any information indicating where dot images(e.g., a black mark) should be printed across a line of the media, andin this example is provided by a series of 1's and/or 0's. A ‘1’indicates a dot image should be printed, and a ‘0’ indicates a dot imageshould not be printed. As such, a “line dot state” 192, may beconsidered any information indicating whether a dot image should beprinted for a given line and printehead dot. In this example, a 1 mayindicate the line dot state is on (e.g., a dot image should be printed)and a 0 may indicate the line dot state is off (e.g., a dot image shouldnot be printed). For example, a printed line of whitespace may have linedot states for each of five dots defined as 0, 0, 0, 0, 0, respectively,and a printed line that is a solid black line may have line dot statesfor each of five dots defined as 1, 1, 1, 1, 1,

FIG. 1D illustrates an example media 120 that may be printed to usingthe print job information 181 of FIG. 1C. Note that dot images areprinted in areas corresponding to a ‘1’ in the print data line. A “dotimage” may be considered an area of the media 120 that has been printed(e.g., left a mark on the media), such as dot image 196. Unprinted dotimage areas on the media 120 correspond to a ‘0’ in the print data line.An “unprinted dot image area” may therefore be considered an area of themedia 120 where a dot image has not been printed, such as the unprinteddot image area 194 (which corresponds to line dot state 192). A “printedline,” such as printed line 184, may therefore be considered acollection of dot images and/or unprinted dot image areas on the media120, often configured perpendicular to the media movement direction. Assuch, it will be appreciated that a “printed line,” in some embodiments,may actually comprise only unprinted dot image areas (e.g., an area ofwhite space on a white media). Printed line 184 is an example printedline corresponding to the print data line 182. It will be appreciatedthat while the dot images of FIG. 1D appear square, the dot imagesproduced by the printhead dots 131 may be any shape and/or size.

Returning to FIG. 1A, various components of the printing device 100 maybe controlled by a printer controller 102, while functions relatingspecifically to processing print data lines may be controlled byprocessing circuitry 200. In some embodiments, the printer controller102 and/or the processing circuitry 200, may be embodied as or comprisea circuit chip. The circuit chip may constitute means for performing oneor more operations for providing the functionalities described herein.

In some example embodiments, the printer controller 102 and/orprocessing circuitry 200 may access or otherwise include memory devices104 and 201, respectively. In some example embodiments, the printercontroller 102 and/or processing circuitry 200 may be embodied as acircuit chip (e.g., an integrated circuit chip) configured (e.g., withhardware, software, or a combination of hardware and software) toperform operations described herein. The printer controller 102 and/orprocessing circuitry 200 may perform some or all of the processingfunctionalities introduced above and described in further detailhereinafter.

The printer controller 102 and/or processing circuitry 200 may beembodied in a number of different ways. For example, the printercontroller 102 and/or processing circuitry 200 may be embodied asvarious processing means such as one or more of a microprocessor orother processing element, a coprocessor, a controller, or various othercomputing or processing devices including integrated circuits such as,for example, an ASIC (application specific integrated circuit), an FPGA(field programmable gate array), or the like. In some embodiments, theprinter controller 102 and/or processing circuitry 200 may comprise aplurality of processors. The plurality of processors may be in operativecommunication with each other and may be collectively configured toperform one or more functionalities of the printing device 100 asdescribed herein.

In some example embodiments, the printer controller 102 and/orprocessing circuitry 200 may be configured to execute instructionsstored in the memory devices 104 and/or 201, respectively. In someexample embodiments, memory device 104 and/or 201 may include one ormore non-transitory memory devices such as, for example, volatile and/ornon-volatile memory that may be either fixed or removable. In someembodiments, the memory device 104 and/or 201 may be internal to thehardware embodying the printer controller 102 and/or processingcircuitry 200, respectively, such as an ASIC, FPGA, or the like. In thisregard, the memory device 104 and/or 201 may comprise a non-transitorycomputer-readable storage medium. It will be appreciated that while thememory device 104 and/or 201 is illustrated as a single memory, thememory device 104 and/or 201 may comprise a plurality of memories. Thememory device 104 and/or 201 may be configured to store information,data, applications, instructions and/or the like for enabling theprinter controller 102 and/or processing circuitry 200, to respectivelycarry out various functions in accordance with one or more exampleembodiments. For example, the memory device 104 and/or 201 may beconfigured to store print data lines. As described herein, variousmanipulations of the print data lines may be performed, which may bestored on memory device 104 and/or 201. The memory device 104 and/or 201may be additionally configured to buffer input data for processing bythe printer controller 102 and/or processing circuitry 200. Additionallyor alternatively, the memory device 104 and/or 201 may be configured tostore instructions for execution by the printer control 102 and/orprocessing circuitry 200. As yet another alternative, the memory device104 and/or 201 may include one or more databases that may store avariety of data. Among the contents of the memory device 104 and/or 201,applications may be stored for execution by the printer controller 102and/or processing circuitry 200 to carry out the functionalityassociated with each respective application.

As such, whether configured by hardware or by a combination of hardwareand software, the printer controller 102 and/or processing circuitry 200may be capable of performing operations according to embodiments of thepresent invention while configured accordingly. Thus, for example, whenthe printer controller 102 and/or processing circuitry 200 is embodiedas an ASIC, FPGA, or the like, the printer controller 102 and/orprocessing circuitry 200 may be specifically configured hardware forconducting the operations described herein. Alternatively, as anotherexample, when the printer controller 102 and/or processing circuitry 200is embodied as an executor of software instructions, the instructionsmay specifically configure the printer controller 102 and/or processingcircuitry 200 to perform one or more operations described herein.

As such, the printer controller 102 may be configured to control variouscomponents of the printing device 100 such as a display panels, powersupplies, and/or the like. In some embodiments, the printer controller102 may be configured to receive a print job from a host system, andstore print job information on memory device 104. The printer controller102 may process the print job information to generate print data lines,which may be transmitted to processing circuitry 200. Processingcircuitry 200 may include print engine 170, for processing the printdata lines. The print engine 170 may therefore be configured to receiveprint data lines from the printer controller 102, and store and accessthe print data lines on memory device 201. Additionally oralternatively, in some embodiments, the printer controller 102 may beconfigured to transmit a bit map image, for example, to processingcircuitry 200, and the print engine 170 may generate the print datalines based on the image, and store and/or access the print data lineson memory device 201. In some embodiments, the printer controller 102may be disposed in communication with a battery 115 for powering theprinter controller 102 and one or more additional printer components.

As such, the print engine 170 may process the print line data, andinstruct the printhead driver 150 to cause the printhead 130 to producea printed line on a media. Further, the printhead controller 165 may beconfigured to generate and send commands to the printhead driver 150indicating the dot states and strobe times to be used in operating theprinthead 130 to produce a printed line. In other words, the printheadcontroller 165 may be configured to provide inputs to the printheaddriver 150 to cause the printerhead driver 150 to control the operationof the dots 131 of the printhead 130 to print to the media 120.Accordingly, printhead controller 165 may communicate with printheadassembly 190 via data lines 180.

The print engine 170 may also include a motor controller 160, which mayinterface with the motor driver 161 to control the operation of themotor 110. In this regard, the motor controller 160 may sendinstructions to the motor driver 161, which in turn controls the speedof the motor. The motor controller 160 may therefore coordinate themovement of the media into position to be printed. The print engine 170may control or otherwise provide instructions to printhead driver 150and motor driver 161, via the printhead controller 165 and motorcontroller 160, to ensure that the operations of the printhead 130 andthe movement of media relative to the printhead 130 are correctlysynced. Further, motor 110 may cause media 120 to move from left toright through the printing device 100 and relative to the printhead 130at a speed that is controlled by the motor controller 160. Moreparticularly, the media 120 may be moved by a platen (not shown) of theprinting device 100, where the platen is driven by the motor 110,possibly via one or more gears that are operative with the platen.

In this regard, the functionalities described herein may be performed bythe processing circuitry 200 controlled by the print engine 170, aloneor in conjunction with processors of the printhead controller 165 andthe motor controller 160. As such, printhead controller 150 and motorcontroller 160 may be implemented using the same or similar hardware asthe print engine 170.

NEIGHBORING DOT CONFIGURATIONS AND FRAMES

In some example embodiments, thermal printing devices, such as printingdevice 100, may be used to print barcodes to labels, receipts, cards, orother items. Due to the high speed and precision required in manycommercial and/or industrial barcode applications, printed barcodesshould be high quality, and free of blurred images, stray dots, orbleeding. Thermal printing devices are often lightweight and compact,making them ideal for mobile applications (e.g. handheld printingdevices), or the like. Embodiments of the claimed invention may provideefficient power usage in thermal printing devices, in order to providelong lasting battery life without adding significant weight and/or bulkto the device, while still maintaining the precision required to print abarcode.

As such, according to various example embodiments, a print engine,(e.g., print engine 170) may be configured to divide a print data lineacross a number of frames. Although the print data line may be thelowest level portion of an image distinguishable by the printercontroller 102, the print engine 170 may further divide a print dataline into a number of frames, indicating frame dot states for everyprinthead dot of the printhead 130. A “frame dot state” may therefore beconsidered the state of a printhead dot during printing of a frame. A“frame” may be considered a collection of frame dot states for aparticular printhead dot during printing of a portion of a line. A framedot state of ‘1’ or ‘on’ may indicate that the dot will be energized,and a frame dot state of ‘0’ or ‘off’ may indicate that the dot will notbe energized, according to some example embodiments. A “frame dot statesequence” may be considered a collection of frame dot states, includinga frame dot state for every dot of the associated print data line.

The print engine 170 may therefore advantageously configure theprinthead 130 to strobe a printhead dot, for example, for only half ofthe frames representing a print data line, whereas a printing device notutilizing a multi-frame line printing scheme, may strobe the dot for theduration of the line strobe time, thereby using more energy, andpotentially overheating the dot. Overheating a dot may cause a dot imageto inadvertently be printed where printing is not intended. Although aprinthead dot may not be strobed in a subsequent line, excess heat fromprinting of a previous dot image may cause printing of a stray orblurred dot. Utilizing frames may allow the print engine 170 to havemore control over the temperature of the dots, and therefore moreefficiently distribute energy.

The print engine 170 may analyze the print job information stored in amemory device (e.g., memory device 201) to divide a print data line intoa number of frames, and determine frame dot state sequences. The linestrobe time may be determined based on the content to be printed on thatline. According to some example embodiments, determining the line strobetime for the content of the line may be determined based on aspecification for the printhead that is being used. Based on the linestrobe time, a duration for strobing the dots of a frame, referred to asthe “frame strobe time,” can be determined. According to some exampleembodiments, a frame strobe time may be determined by dividing the linestrobe time by the number of frames, where each frame may have the sameduration. In some embodiments, the frame strobe time need not be uniformacross the frames. In order for a dot image to be printed, the dot mayneed to provide sufficient energy in the form of heat to react with themedia, which may require the dot to be on for a number of consecutiveframes, but not necessarily for all of the frames associated with agiven line. Accordingly, in some instances, a dot used to print a dotimage that is part of a line may be strobed multiple times during theprinting of the printed line. Additionally or alternatively, movement ofthe media may be performed at the frame level, such that the media maymove from frame-to-frame in increments that are less than that of a fullprinted line (e.g., steps that are ⅛ of a printed line).

According to some example embodiments, a print data line may be dividedinto eight frames, although any number of frames may be used. The framedot state sequence for each frame may be set for the purpose of printingthe associated printed line, for pre-heating the dot for printing asubsequent printed line, for dot cool down for history control, or thelike.

Different frame dot state sequences may be used under differentcircumstances. To determine which frame dot state sequence to use, ananalysis of print data lines may be considered. More specifically, adetermination of which frame dot state to use for a particular printheaddot may be based on an analysis of the line dot states of the particularprinthead dot and its neighboring line dot states. “Neighboring line dotstates” to a particular line dot state may be considered any line dotstate in close spatial and/or temporal proximity. A line dot state inclose “spatial” proximity may be considered a line dot state of aprinthead dot in the same print data line, and a line dot state in close“temporal” proximity may be a line dot state in a substantially closeprint data line, such as a print data line representing a printed linebefore or after a printed line represented by a print data linecomprising the particular line dot state of interest. As such, in someembodiments, a neighboring line dot state in close temporal proximity toa particular line dot state may be associated with the same dot of theprinthead 130.

To analyze the neighboring line dot states, in accordance with someexample embodiments, the data describing a given print job stored in amemory device, such as memory device 201, may be considered by the printengine 170. FIG. 2B is an example neighbor memory layout schematic forconsidering neighboring line dot states. For a given dot, the printengine 170 may access and/or otherwise receive a neighbor memory layout,that may be provided by parsing print data lines from a print data lineFIFO (first-in first-out) memory buffer, for example. A “neighbor memorylayout” for a particular dot may therefore be considered a collection ofline dot states for the particular dot and its neighboring dots.

FIG. 2A illustrates example print data lines 310 that are stored in amemory block of, for example, the memory device 201. As describe above,the memory block may be a FIFO memory buffer, fed by printer controller102, for example. Additionally or alternatively, the print data lineFIFO memory buffer may be fed by the processing circuitry 200, uponparsing a received bit map image, for example, from printer controller102. The print data lines 310 may indicate the content of each line thatis to be printed by including the line dot states for each of five dotsfor the next sixteen lines (i.e., Line 1 to Line 16). The print datalines 310 may be analyzed by the print engine 170 to determinecorresponding frame dot state sequences.

The memory block storing print data lines 310 may be viewed by theprinter controller 102 as a write-only memory that can be written to viaDirect Memory Access (DMA). Data may be transferred into the memoryblock in, for example, under control of the print engine 170. The printdata line FIFO memory buffer may be 16 lines deep to assure that theprinter controller 102 is able to keep the print engine 170 fed withdata in the event of communications error. If the print data line FIFOmemory buffer runs empty, the printing device 100 may stop printing,which can result in poor print quality and intermittent paper motion.

In one embodiment, if the selected line dot state is at A5, the line dotstates at A0 through A4 may be retrieved and evaluated to determine anappropriate frame dot state sequence for the dot. In FIG. 2B, theneighbor memory layout schematic indicates that the value at A5 is theline dot state of the selected line dot state for the current line. A0represents the line dot state of the dot to the right of the selectedline dot state during the current line. A1 represents the line dot stateof the dot to the left of the selected line dot state during the currentline. As such, line dot states represented by A0 and A1 may beconsidered spatially related neighboring dots. A2 represents the linedot state of the selected line dot state during the printing of theprevious or past line. A4 represents the line dot state of the selectedline dot state during the printing of the next line. Finally, the valueat A3 is the line dot state of the selected line dot state during theprinting of a line that is two lines in the future relative to thecurrent line. According to various embodiments, the values of the linedot states in these positions of the neighbor memory layout may beconsidered when determining a frame dot state sequence for the selectedline dot state.

Turning to FIG. 2C, if the selected line dot state is at 311 of FIG. 2A,the neighbor memory layout of FIG. 2C may be considered. In thisexample, the selected line dot state 311 has both spatial and temporalneighbor line dot states as indicated by the neighbor memory layoutschematic of FIG. 2B, however, for line dot states on the edges of theline, a neighboring spatial line dot state may not exist. In thissituation, a fictitious line dot state of 0 may be considered.Similarly, line dot states in the first and last lines may not haveneighboring temporal line dot states, and a fictitious line dot state of0 may be considered.

Based on the neighbor memory layout, such as the neighbor memory layoutof FIG. 2C, a layout signature can be derived. Various techniques can beused to determine a layout signature. For example, in one embodiment,the values of the neighbors may be concatenated or sequenced to form abinary number that is the layout signature. Here, the binary number forthe layout signature may be a six-bit number based on the definedpositions in the memory layout. By applying the neighbor memory layoutschematic of FIG. 2B to the neighbor memory layout of FIG. 2C, a binarynumber can be generated, as shown in FIG. 2D. In this example, thebinary number representing the line dot states of the selected line dotstate and the neighboring dots is 010000(0*2⁵+1*2⁴+0*2³+0*2²+0*2¹+0*2⁰). The binary number may be stored onmemory device 201, for example.

Given the binary number, the print engine 170 may convert the binarynumber to hexadecimal, in this example, hexadecimal 10 (1*16¹+0*16⁰).FIG. 3A is an example table of frame dot state sequence addresses thatmay be stored to memory device 201, for example. By referencinghexadecimal 10 in the table of 3A, address 23 is returned. In someembodiments, the print engine 170 may convert a binary number to decimaland reference a frame dot state sequence address table by the decimalequivalent. In some embodiments, no conversion may be necessary, and aframe dot state sequence may be identified by the binary number itself.

FIG. 3B illustrates an example frame dot state sequence table, providing32 frame dot state sequences that can be selected for a selected linedot state. In the example process being considered with respect toselected line dot state 311, address 23 may be referenced. As such, theframe dot state sequence for a selected line dot state at 311 is1,0,0,0,0,0,0,0, where the sequence is listed with the frame dot stateof the first frame on the right of the sequence and the frame dot stateof the last frame on the left. This sequence may be used because thenext line dot state for the selected line dot state is a 1, andtherefore the 1 in the last frame of the sequence can be used to preheatthe dot for printing a dot image during the next line. In other words,strobing the dot in the 8^(th) frame only will not cause the dot toreach a temperature resulting in a dot image in line 2, however the dotmay be strobed in the final frame in order to preheat for printing of adot image in line 3. The preheat frame dot state sequence may thereforereduce the required energy needed during printing of line 3, allowingfor more efficient energy distribution across frames and print datalines.

Frame dot state sequences at addresses 23-27 may provide for variouspreheating functionality. Frame dot state sequences at addresses 18-22may provide for a cooldown. A cooldown may be beneficial in situationswhere excess heat remains from the printing of a previous dot image, andthe dot may be cooled to prevent a stray dot image in subsequent printedlines, where a dot image need not be printed. Additional frame dotsequences may be provided to enable printing of uniquely shaped dotimages. For example, a frame dot sequence may be provided to producetear drop shaped dot images, box shaped dot images, center justified dotimages, and/or the like. The frame dot state sequences of FIG. 3A areprovided for example, and it will be appreciated that any number offrame dot state sequences may be utilized.

As mentioned above, frame dot state sequences may be determined for eachline dot state of a given print data line. FIG. 4 illustrates an examplecompilation of the frame dot state sequences for each of the line dotstates of Line 2 in FIG. 2A. Note that the frame dot state sequence forDot 3, which was the selected line dot state analyzed above, isidentified at 400. During the printing of Line 2, the dots during eachframe will be strobed as appropriate, according to their respectiveframe dot state sequences. For example, during Frame 1, Dot 1 and Dot 5will be strobed. During Frame 2, Dot 1 and Dot 5 will again be strobed,and so on until Dots 1, 2, 3, and 5 are strobed during Frame 8 whenprinting of Line 2 is complete.

According to various example embodiments, after determining the framedot sequences for each of the line dot states, the frame dot statesequences, such as those of FIG. 4, may be loaded into a frame FIFOmemory buffer, and stored on memory device 201, for example. Accordingto some example embodiments, the frame FIFO memory buffer may beconfigured to store 16 frames, or 2 printed lines worth of frame dotstate sequences, for example, for lines to be printed as a series of 8frames. The information in the frame FIFO memory buffer may be sent tothe printhead 130 via the printhead controller 165. A framer function ofthe print engine 170 may control the loading of the printhead 130 andsignaling to step the motor, as further described below.

When printing a line, the printhead driver 150 may control the strobingof the dots based on instructions provided to the printhead driver 150by the print engine 170. The frame strobe time can vary based ontemperature, voltage, and frame dot state sequences, but may be boundedby the frame time. The frame strobe time may therefore be less than orequal to the frame time. According to some example embodiments, theframe strobe time may be correlated to the motor speed. According tosome example embodiments, the frame strobe time for each of the frames,and the associated motor speed, may be adjusted to accommodate thelongest of the pre-calculated frame strobe times.

Frame strobe times for the frames may be calculated on a frame-by-framebasis. The “dot density, ” or number of dots strobed in a given fame,can change, and therefore impact the frame strobe times. Given thisdynamic, the print engine 170 may consider the dot density in a frameand calculate the required frame strobe time for that frame during, forexample, the printhead latch time. In some embodiments, printheads areconstructed as double buffered latches, allowing loading of an inputbuffer with new data, (e.g., frames) while data from the output bufferis being strobed. The printhead latch time is therefore defined as thetime it takes to transfer the data from an input buffer to the outputbuffer. A frame strobe time may therefore be calculated during theprinthead latch time. The print engine 170 may therefore compensate forslight changes in dot density due to frame dot state sequences caused byvariables such as preheat.

According to some example embodiments, a base strobe time may be derivedfrom the specification for the printhead being used, and considered indetermining individual frame strobe times. The base strobe time may beconsidered the line strobe time required to print a particular opticaldensity of a dot. In some embodiments, tone may be adjusted to lightenand/or darken the dot images. If a dot image were to be made darker, theprint engine 170 may increase a base strobe time, by a requested percentor multiplier, for example, to calculate a relatively longer framestrobe time, resulting in a darker dot image. Conversely, a base strobetime may be decreased, by a specified percent, for example, to calculatea relatively shorter frame time to produce a lighter dot image. In anexample embodiment, a frame strobe time capable of achieving a tone of100 may be achieved by multiplying a base strobe time by 2. A tone of200 could be achieved by multiplying a base strobe by 3, for example.

In some embodiments, temperature reading(s) and battery level(s) may bemeasured by the print controller 102 and transmitted to the print engine170 with every new print data line, for example. As such, temperatureand battery level(s) may also be considered in calculating frame strobetimes.

According to some example embodiments, once the line strobe time hasbeen determined for the line, the print engine may be configured todivide the strobe time into eight separate periods, one for each frame.Further, the print engine may bias the strobe time to the earlierframes, later frames, middle frames, or the like. According to someexample embodiments, the print engine 170 may be configured to cause apulse strobe of the printhead dot between frames to keep the printheaddot warm, or the print engine 170 may leave the printhead dot off untilthe next frame.

According to some example embodiments, turning a dot on may involvestrobing the dot using a pulse width modulated signal. The width of thepulse may be based on the motor speed at a given time. For example, aparticular printhead dot may need to be heated more aggressively whenthe motor 110 is moving more quickly. As such, as the motor speed isincreased the portion of the pulse width modulated signal that is highor on may be increased relative to the speed. In other situations, aparticular printhead dot may require less heat when the media is movingquickly since the printhead dot has less time to cool off followingprinting of a previous line, so that as the motor speed is increased theportion of the pulse width modulated signal that is high or on may bedecreased relative to the speed of the media. According to some exampleembodiments, this modulation may be partially based on other operatingcharacteristics of the printer, including characteristics of the powersupply, the type of media, or operating temperature. When the printer ispowered by a battery, parameters such as battery type, battery charge,battery age, and battery temperature may influence printhead dot heatingcharacteristics and thus may be taken into account when establishing themodulation signal. The temperature of the media (ribbon or printablesubstrate), temperature of the printhead, and ambient temperature invicinity of the printhead may each influence printhead dot heating andcooling characteristics and may also be taken into account whendetermining the modulation signal. The material, dimensions, density,specific heat, surface finish, and composition of the media, ribbon,adhesive, or liner may also influence printhead dot heating and coolingcharacteristics, the speed and acceleration of the media with respect tothe printhead. These characteristics may also be taken into account whenestablishing the modulation signal. The print mechanism of the printer,including the printhead, the platen roller, and various media guides andsensors may further influence printhead dot heating and coolingcharacteristics and/or the speed and acceleration of the media withrespect to the printhead, and may also be taken into account whenestablishing the modulation signal.

According to some example embodiments, the print engine 170 may beconfigured to move the motor 110 and therefore the media 120 on aper-frame basis. In this regard, the print engine 170 may cause slightmovements (e.g., less than a movement between frames) of the media ineach frame. As such, the print engine 170 may direct the printhead 130to strobe the dots using particular frame dot state sequences and framestrobe times, and direct the motor 110 to control motor movements toproduce a desired printed line. Such synchronization may additionallyprovide for precise printing of tear drop shaped dot images, box shapeddot images, center justified dot images, and/or the like.

FIG. 5 is a flowchart of the process that an example embodiment mayimplement in order to produce a printed line using successive frames. Atoperation 510, a print data line may be provided from printer control102, such as the print data lines provided at 310. As described above, aprint data line may be stored in print data line FIFO memory buffer onmemory device 201, for example, and may therefore be accessed by theprint engine 170. At operation 520, the print data line may be processedinto frames, as described above and in further detail with respect toFIG. 5B below.

According to operation 530, after a line has been divided into frames,the print engine 170 may feed the frames into a frame FIFO memorybuffer, which may be stored on memory device 201, for example. Inoperation 540, print engine 170, or printhead controller 165, mayretrieve frames from the frame FIFO memory buffer and feed a frame toprinthead 130. More specifically, the printhead driver 150, may signalthe printhead 130 to strobe the dots according to the frame, as shown byoperation 550. The printhead 130 may strobe the dots to print to themedia 120 for the duration of the strobe time for that frame.

At operation 560, after dots have been strobed, the print engine 170,with the motor controller 160, for example, may signal the motor driver161 to cause the motor 110 to advance the media. In response, the motor110 may cause the media to move (not depicted), positioning the mediafor subsequent strobing.

At operation 580, print engine 170 may determine if there are additionalframes for processing the current print data line, and if so, steps530-580 may be repeated until the print data line has been processedinto frames, and strobed. At operation 590, print controller 102 maydetermine if there are additional print data lines in the print job tobe printed. The operations 510-590 in the flowchart illustrated in FIG.4 may repeat thereafter until the entire print job has been completed.The operations have been illustrated in such a way to depict theprocessing of a print data line into frames, and communication of theframes to the motor 110 and printhead 130. It will be appreciated thatin an example embodiment, the printer controller 102 may provide printdata lines to the print engine 170 via a repeatedly fed print data lineFIFO memory buffer. Likewise, the print engine 170 may provide frames tothe printhead driver 150 via a repeatedly fed frame FIFO memory buffer.As print data lines are processed into frames, the print engine 170 maycontrol the printhead 130 and motor 110, via the printhead controller165 and motor controller 160, respectively, to ensure synchronization ofthe printhead 130 and motor 110.

FIG. 6 is a flowchart illustrating the processing of a print data lineinto frames using neighbor analysis in accordance with some exampleembodiments. At operation 600, the print engine 170 may analyze aneighbor memory layout for a selected line dot state, wherein theneighbor memory layout comprises the selected line dot state and aplurality of neighboring line dot states. In order to determine theframe dot state sequences for the dots, print engine 170 may access thedata representing the current line, the next two lines to be printed,and the past line that was printed. Other embodiments may consider anynumber of past lines, any number of future lines, or any number ofspatial neighbors to determine the frame dot state sequences. Atoperation 610, based on the analysis, the print engine 170 may determinea frame dot state sequence for the selected line dot state, wherein theframe dot state sequence comprises a plurality of frame dot statesindicating a state of a printhead dot during printing.

In some embodiments, determining the frame dot state sequence mayoptionally include (as shown by the dashed outlines) operations 620-650.As described above with reference to an example embodiment and withrespect to FIGS. 2A-2D, at operation 620, the print engine 170 maydetermine a layout signature by generating a binary numberrepresentative of the selected line dot state and the neighboring linedot states.

At operation 630, the print engine 170 may convert the binary number toa hexadecimal number. At operation 640, the print engine 170 mayidentify an address of a frame dot state sequence associated with thehexadecimal number. The address may be identified using a table such asthe example table of FIG. 3A. At operation 650, the print engine 170 maydetermine the frame dot state sequence based on the address, with atable such as the table of FIG. 3B, for example.

One of ordinary skill in the art would appreciate that variouspermutations of frame dot state sequences may be defined and utilizedand the description above provide only a subset of the various options.In this regard, different example embodiments may be defined thatinclude variations on the number of frames per print line, differingframe strobe times, differing frame dot state sequences, and the like.Using a combination of these variables can, in some example embodiments,advantageously cause the printing device to utilize residual heatgenerated by the thermal printhead to reduce unnecessary heating of thedots and conserve power as well as produce faster, higher quality printjobs.

MOTOR CONTROL

According to some example embodiments, a printer (e.g., a printingdevice 100) may also be controlled by the print engine 170 to performmotor control. The speed of the motor during any portion of a print jobmay be related to the content of the line that is being printed. Forexample, if a line of whitespace is being printed (short or no strobetime needed), the motor 110 may be capable of forming the line using themaximum motor speed (i.e., since no actual printing of the media isbeing performed). On the other hand, if a dark solid line of content isbeing printed for a given print line (longer strobe time needed), thenthe motor 110 may be required to move at a significantly slower speedduring the printing of that line so that the printhead 130 can interfacewith media long enough to perform proper heating of the media. However,abrupt changes in motor speed, such as one that may be encountered whenprinting a solid line followed by white space, may cause undesirablenoises, as well as jerky movement of the printer, which in some casesmay cause the printer to stall or otherwise malfunction.

In example embodiments, the maximum motor speed to print a line may bedefined based on the line strobe time needed to print the line. In amulti-frame line printing scheme, such as those described above, themotor speed may be based on the frame stobe times that are being used toprint the line. However, the frame strobe times may also be a functionof the line strobe time, and therefore the line strobe time may beconsidered in determing the motor speed needed to support properprinting. Based on the content of the line to be printed, as provided,for example, in the print lines 310 of the print data line FIFO memorybuffer, a line strobe time and an associated maximum speed for printingeach line based on the respective line strobe time can be determined.

FIG. 7A illustrates print data lines 310, a column 700 indicatingcorresponding maximum media speeds in ips, for example, that the mediacould move during printing of a corresponding line, a column 702indicating corresponding line strobe times, and a column 704 indicatingactual speeds of the motor, as calculated according to the operationsdescribed herein. For purposes of the foregoing description and appendedclaims, the term “actual speeds” or “actual motor speed” does not referto a measured motor speed. Rather, these terms are meant to refer to acalculated motor speed setting for engaging the motor and could differfrom the actual speed of the motor if measured externally.

Although previous example embodiments illustrate print data lines for aprinting device 100 comprising a printhead 130 having 5 dots, theexample data provided with respect to FIG. 7A assumes a printhead 130having 4 dots. As described above, it will be appreciated that theprocesses and operations described herein may be applied to a printhead130 having any number of dots.

Considering a print data line FIFO memory buffer as described above,each time a line is processed and/or printed, that print data line maybe removed from the print data line FIFO memory buffer, and a new printdata line may be inserted. With each iteration, a new analysis of theprint data line FIFO memory buffer may be performed and the actual speedof the motor 110 may be adjusted to the new slowest speed based on theanalysis, or the speed may be increased when a faster speed isappropriate. Data provided in area 706 of FIG. 7A provides example printdata lines and corresponding maximum motor speeds and line strobe times,that may be provided in a print data line FIFO memory buffer capable ofstoring data for 16 lines. The data provided in area 706 (and/or theprint data line FIFO memory buffer) may therefore be used in determiningan actual motor speed during the printing of line 1, for example. Forcalculation of an actual motor speed for line 2, lines 2-17 may beaccessed in the print data line FIFO buffer, and so on, allowing theprint engine 170 to “look ahead” 16 lines each time the print engine 170calculates an actual motor speed for a particular line.

Maximum motor speeds, such as those in column 700, may be determinedbased on the line strobe times, which may be based on the content of theline that is to be printed (e.g., according to the print data line).Accordingly, a motor control technique can utilize the line strobe timesas an input for determining the actual speed at which to run the motor110 at a given time by converting the line strobe time into a maximumspeed for the motor 110 (and therefore the speed of the media 120). Itis understood, that while the information in column 700 indicates themaximum speed for printing the respective line based on the line strobetime needed to print the line, the motor 110 could move at a slowerspeed, such that the overall time the printhead 130 spends over thecorresponding area of the media 120 is longer than the strobe timeneeded to print the dot images of the line.

According to various example embodiments, the print engine 170 may beconfigured to analyze the determined line strobe times for each line ina given set of lines to be printed and to identify the longest durationline strobe time from within the set. For example, referring to FIG. 7A,the set may be defined as the 16 line memory of the print data line FIFOmemory buffer. Over the first 16 lines, the print engine 170 mayidentify a relatively long line strobe time of 0.003, and acorresponding slow motor speed of 0.5 for Line 5. Accordingly, the printengine 170 may set the actual motor speed for lines 1-4 to graduallyincrease, as to avoid a drastic increase in motor speed from theprinting of line 4 to the printing of line 5. As such, the actual motorspeeds calculated for lines 1-4 may be less than the correspondingmaximum speeds in column 700.

The print engine 170 may perform an analysis each time a new print dataline is introduced to the set. When a new print data line enters theprint data line FIFO memory buffer, the print engine 170 may beconfigured to calculate an actual motor speed for a line based on someor the entire content of the print data line FIFO memory buffer. Assuch, during processing of line 5, the print engine 170 may analyzelines 5-20. In lines 5-20, the lowest maximum motor speed is 2. Theprint engine 170 may therefore determine actual motor speeds thatincrease, from line 5, until 2 ips is reached at or around line 9. Theactual motor speed and/or media speed may be maintained at 2 ips throughthe printing of line 13. Following printing of line 13, lines 14-29 maybe made accessible in the print data line FIFO memory buffer. A slowerspeed of 1 ips is needed to print line 29. The print engine 170 maytherefore begin decreasing the motor speeds in anticipation of printingline 29.

According to some example embodiments, the print engine 170 may causethe motor 110 to reduce speed in incremental steps, rather than using adrastic change in speed. For example, the print engine 170 may beconfigured to control the motor 110 to reduce the speed of the media by0.4 ips increments per line. By avoiding larger changes in speed,unwanted audible noises from the printer, line overprinting due to astalled motor, and printer malfunction can be avoided. Similarly, whenthe analysis indicates that an increase in speed may be performed,incremental increases in speed may be used. The incremental steps forincreasing speed may be the same change used for reducing the speed orthe step amount may be different. According to some example embodiments,the number of print data lines in the print data line FIFO memory buffercan be defined, such that using an incremental step per line, the motor110 may be able to transition from the slowest/fastest speed to thefastest/slowest speed within the span of the number of print data linesin the print data line FIFO memory buffer.

FIG. 7B is a graph of the maximum motor speeds 710 (corresponding tocolumn 700 of FIG. 7A), and actual motor speeds 712 (corresponding tocolumn 704 of FIG. 7A). As illustrated, and described above, the actualmotor speeds 712 may be equal to or less than the maximum motor speeds710, but may not be greater than the maximum motor speeds. Additionally,the actual motor speeds 712 show smoother and more gradual changes inspeed between lines, as opposed to the maximum motor speeds 710, thatmay otherwise produce jerky movements and undesirable noise.

FIG. 7C is a flowchart illustrating operations that may be performed bya print engine 170 to implement motor control as described above. Atoperation 720, the print engine 170 may access a plurality of print datalines in a memory device, such as memory device 201. At operation 730,the print engine 170 may determine respective line strobe times andmaximum motor speeds for the print data lines, as described above withrespect to FIG. 7A. At operation 740, the print engine 170 may identifya longest strobe time from the respective line strobe times. Atoperation 750, the print engine 170 may determine a maximum step inmotor speed from the printing of one line to the printing of an adjacentline. At operation 760, the print engine 170 may determine an actualmotor speed for a selected print data line based on the maximum motorspeed for the selected print data line, the maximum step in motor speed,and/or the respective line strobe times. In some embodiments, an actualmotor speed may also be based on the longest line strobe time from therespective line strobe times. Example actual motor speeds areillustrated in and described with respect to FIG. 7B above. The actualmotor speed of a line may be no faster than the maximum speed requiredto print the line, but may be impacted by a subsequent longer strobetime, and the maximum step as identified by the print engine 170.

Example methods and apparatuses are therefore provided for controllingthe speed of the motor to arrive at a more gradual transition betweenprinting of lines while considering the line strobe times associatedwith printing future lines. In this regard, a print data line FIFOmemory buffer may be used by the print engine 170 to look ahead atfuture print data lines to determine the longest line strobe time andthe slowest maximum speed. While the example embodiments discussed aboveconsider sixteen print data lines to determine the longest strobe timeand corresponding smallest motor speed, one of ordinary skill in the artwill readily appreciate that any number of print data lines may besimilarly analyzed depending on the application.

PRINTHEAD DETECTION

According to various example embodiments, the interface offered by aparticular printhead 130 may be static and non-configurable. However,the print engine 170 may be configurable, and upon detecting which typeof printhead 130 has been installed in a printing device, such asprinting device 100, the print engine 170 may reconfigure its interfaceaccording to the printhead type for subsequent operation. Examplemethods and apparatuses are therefore provided for detecting a type ofprinthead 130 installed in a printing device 100 to configure theinterface to operate with the detected printhead 130.

The print engine 170, according to some example embodiments, may beconfigured to send a signal to an installed printhead 130 in an effortto detect the type of printhead 130 that has been installed. The printengine 170 may first choose an output pin from the processing circuitry200 being controlled by the print engine 170 to an input to theprinthead 130, and transmit a signal on the selected output pin. Theselection of the print engine output pin may be based on the output pinused to communicate with a previously installed printhead 130, or adefault first option may be used.

The print engine 170 may then monitor a print engine input pin ofprocessing circuitry 200 that is connected to the printhead 130 todetermine whether a return signal is received. If a return signal isreceived on the input pin, the print engine 170 may confirm theprinthead type that has been installed in the printing device based onthe output pin being used, and configure the print engine's interfacefor operation with the printhead 130.

If the print engine 170 does not receive a return signal on the inputpin that is being monitored, the print engine 170 may select anadditional print engine output pin to the printhead 130 and send asignal on the additonal print engine output pin. The selection of theadditional print engine output pin may be performed based on, forexample, a predetermined sequence of options. If a return signal isprovided in response to the signal being sent on the additional printengine output pin, the print engine 170 may confirm the printhead typethat has been installed based on the additional output pin being used,and configure the interface for operation with the printhead 130accordingly. If, however, no return signal is provided on the monitoredinput, then another print engine output pin may be selected, or an errorevent may be detected indicating, for example, that an improper ordefective printhead has been installed.

According to some example embodiments, the various print engine outputpins of the processing circuitry 200 being controlled by the printengine 170 may be associated with printheads from particularmanufacturers. For example, if an acknowledgement is returned when asignal is sent on a first print engine output pin of the processingcircuitry, then a Kyocera printhead may be identified. Further, if anacknowledgement is returned when a signal is sent on a second printengine output line of the processing circuitry, then a Rohm printheadmay be identified.

FIGS. 8A and 8B indicate example pin configurations for two differentprintheads, where FIG. 8A displays a pin configuration for a firstprinthead (e.g., a Rohm printhead) and FIG. 8B displays a pinconfiguration for a second printhead (e.g., a Kyocera printhead). Notethat both printheads share the same printhead output pin (i.e., pin 4),but each uses a different printhead input pin (i.e., pin 25 in FIG. 8Aand pin 23 in FIG. 8B). In some embodiments, various printheads 130 maynot necessarily be configured to use the same pin as a printhead outputpin.

In some embodiments, the processing circuitry 200 embodying the printengine 170 may be implemented on a FPGA, along with the memory device201. The FPGA may be connected to a printhead 130 via a 30 pinconnector, for example. FIG. 9 is an illustration of communicationsbetween a FPGA and printhead according to an example embodiment. FPGA900 may be connected to a printhead 130, of unknown type, via numerousconnectors 906 (which may be included or otherwise embodied as datalines 180, for example) that may be unidirectional, or bidirectional, totransmit signals and/or data between the FPGA and printhead. Asindicated at opeartion 910, the print engine 170 may be configured toselect a first print engine output pin, for example pin 23, and send asignal on that pin. In this particular example, the printhead 130 is notconfigured to receive data on pin 23, and the printhead 130 fails torespond. As shown by operation 930, the print engine 170 may monitor pin4 for a response, but at this point in time, detects nothing.

As shown by operation 940, the print engine 170 may then subsequentlysend a signal on print engine output pin 25. As indicated at 950, theprinthead 130 recognizes the signal, and sends a response, at operation960, on pin 4. While monitoring pin 4 for a response, print engine 170detects the response, and may identify the unknown printhead 130 basedon the successful test on pin 25. The print engine 170 may then identifythe printhead as the Rohm printhead illustrated in FIG. 8A.

FIG. 10 is a flowchart illustrating operations for detecting aprinthead, as described above. At operation 1000, the print engine 170may transmit a signal to a printhead on a print engine ouput pin. Atoperation 1010, the print engine 170 may then monitor a print engineinput pin for a response. As shown by operation 1020, in an instance aresponse is received, the print engine 170 may determine a printheadtype based on the output pin.

As shown by operation 1030, in an instance a response is not received,the print engine 170 may transmit a signal to the printhead on adifferent print engine output pin. In this regard, operations 1000-1030may be repeated until a printhead type is identified. Additionally,according to some example embodiments, a response received by the printengine 170 may include data that can be analyzed to determine the widthof the printhead or number of dots on the printhead. In this regard, thesignal sent to the printhead 130 may include test data (e.g., aparticular series of ones and zeros) that can be processed as the testdata passes through the memory buffer of the printhead 130. The testdata may be processed, and the response signal returned to the printengine 170 may be interpreted by the print engine 170 as to indicate howmany dots are present on the printhead 130.

As mentioned above, the print engine 170 may reconfigure the interfaceto the printhead 130 based on the detected type of printhead 130 and thedetermined width of the printhead 130. Because printheads can havedifferent operating specifications, being able to detect and adapt theinterface and subsequent operation of the print engine 170 based on thedetected printhead can result in more efficient and higher qualityprinting.

Many aspects of the present invention rely on thermal printing devices.Some thermal printing devices may print a variety of colors at variousthreshold temperatures. While some embodiments of the present inventionmay take advantage of these capabilities, example embodiments have beendescribed with respect to printing black images on a white medium. Aswill be apparent to one of ordinary skill in the art, the methods andapparatuses disclosed herein may be used with various types and colorsof media and print.

While the present invention has been illustrated by the description ofthe embodiments thereof, and while the embodiments have been describedin considerable detail, it is not the intention of the applicant torestrict or in any way limit the scope of the appended claims to suchdetail. Additional advantages and modifications will readily appear tothose skilled in the art. Therefore, the invention in its broaderaspects is not limited to the specific details, representativeapparatus, methods, and illustrative examples shown and described.Accordingly, departures may be made from such details without departurefrom the spirit or scope of applicant's general inventive concept.Further, it is to be appreciated that improvements and/or modificationsmay be made thereto without departing from the scope or spirit of thepresent invention as defined by the following claims.

What is claimed is:
 1. A method comprising: analyzing, with a processor, a neighbor memory layout for a selected line dot state, wherein the neighbor memory layout comprises the selected line dot state and a plurality of neighboring line dot states; and based on the analysis, determining a frame dot state sequence for the selected line dot state, wherein the frame dot state sequence comprises a plurality of frame dot states indicating a state of a printhead dot during printing.
 2. A method according to claim 1, wherein the neighboring line dot states are identified based on spatial proximity to the selected line dot state.
 3. A method according to claim 1, wherein the neighboring line dot states are identified based on temporal proximity to the selected line dot state.
 4. A method according to claim 1, further comprising: determining a layout signature by generating a binary number representative of the selected line dot state and the neighboring line dot states; and determining the frame dot state sequence based on the layout signature.
 5. A method according to claim 4, further comprising: converting the binary number to a hexadecimal number; identifying an address of a frame dot state sequence associated with the hexadecimal number; and determining the frame dot sequence based on the address.
 6. A method according to claim 1, further comprising: retrieving a print data line; and generating at least two frames representative of the print data line.
 7. A method according to claim 6, further comprising: transmitting the at least two frames to a thermal printhead for printing to a media; and signaling to a motor to move the media.
 8. A method according to claim 6, further comprising: retrieving the print data line from a first-in first-out memory buffer.
 9. A method according to claim 6, further comprising: storing the at least two frames in a first-in first-out memory buffer.
 10. A method according to claim 1, further comprising: retrieving at least one battery parameter indication selected from the group comprising battery type, battery charge, battery age, and battery temperature; and determining a printhead dot strobe time based at least in part on the battery parameter indication.
 11. A computer program product comprising at least one non-transitory computer-readable storage medium having computer-executable program code instructions stored therein, the computer-executable program code instructions comprising program code instructions to: analyze a neighbor memory layout for a selected line dot state, wherein the neighbor memory layout comprises the selected line dot state and a plurality of neighboring line dot states; and based on the analysis, determine a frame dot state sequence for the selected line dot state, wherein the frame dot state sequence comprises a plurality of frame dot states indicating a state of a printhead dot during printing.
 12. A computer program product according to claim 11, wherein the neighboring line dot states are identified based on spatial proximity to the selected line dot state.
 13. A computer program product according to claim 11, wherein the neighboring line dot states are identified based on temporal proximity to the selected line dot state.
 14. A computer program product according to claim 11, wherein the computer-executable program code instructions further comprise program code instructions to: determine a layout signature by generating a binary number representative of the selected line dot state and the neighboring line dot states; and determine the frame dot state sequence based on the layout signature.
 15. A computer program product according to claim 11, wherein the computer-executable program code instructions further comprise program code instructions to: convert the binary number to a hexadecimal number; identify an address of a frame dot state sequence associated with the hexadecimal number; and determine the frame dot sequence based on the address.
 16. A computer program product according to claim 11, wherein the computer-executable program code instructions further comprise program code instructions to: retrieve a print data line; and generate at least two frames representative of the print data line.
 17. A computer program product according to claim 16, wherein the computer-executable program code instructions further comprise program code instructions to: transmit the at least two frames to a thermal printhead for printing to a media; and signal to a motor to move the media.
 18. A computer program product according to claim 16, wherein the computer-executable program code instructions further comprise program code instructions to: retrieve the print data line from a first-in first-out memory buffer.
 19. A computer program product according to claim 16, wherein the computer-executable program code instructions further comprise program code instructions to: store the at least two frames in a first-in first-out memory buffer.
 20. A computer program product according to claim 11, wherein the computer-executable program code instructions further comprise program code instructions to: retrieve at least one battery parameter indication selected from the group comprising battery type, battery charge, battery age, and battery temperature; and determine a printhead dot strobe time based at least in part on the battery parameter indication.
 21. A print device comprising processing circuitry configured to: analyze a neighbor memory layout for a selected line dot state, wherein the neighbor memory layout comprises the selected line dot state and a plurality of neighboring line dot states; and based on the analysis, determine a frame dot state sequence for the selected line dot state, wherein the frame dot state sequence comprises a plurality of frame dot states indicating a state of a printhead dot during printing.
 22. A print device according to claim 21, wherein the neighboring line dot states are identified based on spatial proximity to the selected line dot state.
 23. A print device according to claim 21, wherein the neighboring line dot states are identified based on temporal proximity to the selected line dot state.
 24. A print device according to claim 21, wherein the processing circuitry is further configured to: determine a layout signature by generating a binary number representative of the selected line dot state and the neighboring line dot states; and determine the frame dot state sequence based on the layout signature.
 25. A print device according to claim 21, wherein the processing circuitry is further configured to: convert the binary number to a hexadecimal number; identify an address of a frame dot state sequence associated with the hexadecimal number; and determine the frame dot sequence based on the address.
 26. A print device according to claim 21, wherein the processing circuitry is further configured to: retrieve a print data line; and generate at least two frames representative of the print data line.
 27. A print device according to claim 26, wherein the processing circuitry is further configured to: transmit the at least two frames to a thermal printhead for printing to a media; and signal to a motor to move the media.
 28. A print device according to claim 26, wherein the processing circuitry is further configured to: retrieve the print data line from a first-in first-out memory buffer.
 29. A print device according to claim 26, wherein the processing circuitry is further configured to: store the at least two frames in a first-in first-out memory buffer.
 30. A print device according to claim 21, wherein the processing circuitry is further configured to: retrieve at least one battery parameter indication selected from the group comprising battery type, battery charge, battery age, and battery temperature; and determine a printhead dot strobe time based at least in part on the battery parameter indication.
 31. A method comprising: accessing a plurality of print data lines in a memory device; determining respective line strobe times and maximum motor speeds for the plurality of print data lines; determining a maximum step in motor speed for printing one of the plurality of print data lines to printing an adjacent one of the plurality of print data lines; and determining an actual motor speed for a selected print data line based on the maximum motor speed for the selected print data line, the maximum step in motor speed, and the respective line strobe times.
 32. A method according to claim 31, further comprising: identifying a longest strobe time from the respective strobe times, wherein the determining the actual motor speed for the selected print data line is further based on the longest strobe time.
 33. A method according to claim 31, further comprising: retrieving the selected print data line from a first-in first-out memory buffer.
 34. A method according to claim 33, wherein determining the maximum step in motor speed is based on at least a number of print data lines in the first-in first-out memory buffer.
 35. A computer program product comprising at least one non-transitory computer-readable storage medium having computer-executable program code instructions stored therein, the computer-executable program code instructions comprising program code instructions to: access a plurality of print data lines in a memory device; determine respective line strobe times and maximum motor speeds for the print data lines; determine a maximum step in motor speed from a printing of one line to a printing of an adjacent line; and determine an actual motor speed for a selected print data line based on the maximum motor speed for the selected print data line, the maximum step in motor speed, and the respective line strobe times.
 36. A computer program product according to claim 35, wherein the computer-executable program code instructions further comprise program code instructions to: identifying a longest strobe time from the respective strobe times, wherein the determining an actual motor speed for a selected print data line is further based on the longest strobe time.
 37. A computer program product according to claim 35, wherein the computer-executable program code instructions further comprise program code instructions to: retrieving the selected print data line from a first-in first-out memory buffer.
 38. A computer program product according to claim 37, wherein determining the maximum step in motor speed is based on at least on a number of print data lines in the first-in first-out memory buffer.
 39. A printing device comprising processing circuitry configured to: access a plurality of print data lines in a memory device; determine respective line strobe times and maximum motor speeds for the print data lines; determine a maximum step in motor speed from a printing of one line to a printing of an adjacent line; and determine an actual motor speed for a selected print data line based on the maximum motor speed for the selected print data line, the maximum step in motor speed, and the respective line strobe times.
 40. A printing device according to claim 39, wherein the processing circuitry is further configured to: identify a longest strobe time from the respective strobe times, wherein the determining the actual motor speed for the selected print data line is further based on the longest strobe time.
 41. A printing device according to claim 39, wherein the processing circuitry is further configured to: retrieve the selected print data line from a first-in first-out memory buffer.
 42. A printing device according to claim 39, wherein determining the maximum step in motor speed is based on at least on a number of print data lines in the first-in first-out memory buffer.
 43. A method comprising: providing a printhead connector comprising a first potential print engine output pin, a second potential print engine output pin, and a print engine input pin; transmitting a signal to a printhead on the first potential print engine output pin; monitoring the print engine input pin for a response signal; and upon receiving the response signal on the print engine input pin, determining a printhead type based at least in part on receiving the response signal.
 44. A method according to claim 43, further comprising: transmitting a second signal to the printhead on the second potential print engine output pin; monitoring the print engine input pin for a second response signal; and upon receiving the second response signal on the print engine input pin, determining a printhead type based at least in part on receiving the second response signal.
 45. A computer program product comprising at least one non-transitory computer-readable storage medium having computer-executable program code instructions stored therein, the computer-executable program code instructions comprising program code instructions to: transmit a signal to a printhead on a first potential print engine output pin; monitor a print engine input pin for a response signal; and upon receiving the response signal on the print engine input pin, determine a printhead type based at least in part on receiving the response signal.
 46. A computer program product according to claim 45, wherein the computer-executable program code instructions further comprise program code instructions to: transmit a second signal to the printhead on a second potential print engine output pin; monitor the print engine input pin for a second response signal; and upon receiving the second response signal on the print engine input pin, determine a printhead type based at least in part on receiving the second response signal.
 47. A printing device comprising processing circuitry configured to: transmit a signal to a printhead on a first potential print engine output pin; monitor a print engine input pin for a response signal; and upon receiving the response signal on the print engine input pin, determine a printhead type based at least in part on receiving the response signal.
 48. A printing device according to claims 47, wherein the processing circuitry is further configured to: transmit a second signal to the printhead on a second potential print engine output pin; monitor the print engine input pin for a second response signal; and upon receiving the second response signal on the print engine input pin, determine a printhead type based at least in part on receiving the second response signal. 